【小ネタ】シェルのコマンド履歴に残さない方法

【小ネタ】シェルのコマンド履歴に残さない方法

コマンドした内容を履歴に残さない TIPS です。皆知っているだろうと思ってたのですがチーム内で知らない方もいたので、備忘録として記事にします。
Clock Icon2024.09.18

こんにちは、高崎@アノテーション です。

はじめに

皆さんはセンシティブなパラメータを必要とする Web API を curl コマンドでシェルから実行する必要に迫られたことはありますでしょうか?

私はあります。

その時にとあるやり方を TIPS として展開したところ、知らないメンバーがいたため小ネタとして記事にします。

TIPS について

冒頭で申し上げた

ですが、

…というご意見もあるでしょうが、例えば、

prompt$ curl -v -X POST https://APIのURL \
-H 'accessToken: ここにアクセストークンが入ります' \
-d '{ \
  "destinationId":ここに相手先のアクセスIDが入ります  \
}'

といったコマンドをどうしてもシェル上で実行する必要が出てきた際、アクセストークンだったりアクセス ID といったセンシティブな情報が、シェルの履歴に残ってしまうのは好ましくないこともあります。

逐次ホームディレクトリにあるヒストリファイルを編集して消してもよいのですが、そのまま履歴に残さない方法があります。

prompt$  curl -v -X POST https://APIのURL \
-H 'accessToken: ここにアクセストークンが入ります' \
-d '{ \
  "destinationId":ここに相手先のアクセスIDが入ります  \
}'

こうやるだけです。

先ほどと同じのように見えますが、差が一つあります。

先頭に半角スペースを入れる だけです。

残りますけど?という時

最近では基本的にこのやり方で残らないと思いますが、もし履歴に残ってしまっている(history コマンドを打つと残ってしまっている)場合、ホームディレクトリにあるリソースファイルに以下の行を入れます。

bashの場合

~/.bashrc
HISTCONTROL=ignorespace
    もしくは
HISTCONTROL=ignoreboth

設定して保存したあと新たにシェルを開くか、同じシェル上であれば source ~/.bashrc を実行。

zshの場合

~/.zshrc
setopt hist_ignore_space

.bashrc のときと同じですが、コマンドは source ~/.zshrc になります。

他のシェルの場合

fish

あまり使ったことがないのですが fish の場合はすでに有効になっていたかと思いますので、設定ファイルをいじることなく先頭にスペースを入れるだけで行けると思います。

csh / tcsh

unset savehist を行うと、履歴へ保存すること自体を出来なくすることは可能ですが、今回のケースのように特定のやり方で残す/残さないといった切り替えはできなかったと思います。[1]

その他

使ったことがないのでわかりません。
ごめんなさい。

おわりに

今回はシェルの履歴への残し方をコントロールするやり方について記載しました。

特に zsh においては、ここでは紹介しませんでしたが履歴や補間等、setopt を使った様々な設定がありますので、色々と自分好みにカスタマイズして効率化を図るとより良いと思います。

この記事が皆様のお役に立てば幸いです。

アノテーション株式会社について

アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。

サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。

当社は様々な職種でメンバーを募集しています。

「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。

脚注
  1. ちゃんと使っていたのが 30 年くらい前の話ですのでもしかすると今は出来るのかもしれませんが軽く検索しても見つからずでした。 ↩︎

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.